# @Timer:2022/3/24
# @作者:meng
# @文件名:test.py

# 1、创建一个类【动物类】（Animal）
# 类里有属性（名称，颜色，年龄，性别）
# 类方法有：会叫，会跑

class Animal:
    name = ""
    color = ""
    age = 0
    sex = ""

    def __init__(self,name,color,age,sex):
        self.name = name
        self.color = color
        self.age = age
        self.sex = sex

    def call(self):
        print(f"Animal_{self.name}  is calling")

    def run(self):
        print(f"Animal_{self.name} is running")

# 2、创建子类【猫】
# 继承【动物类】，重写父类的__init__方法，继承父类的属性
# 添加一个新的属性，毛发=短毛
# 添加一个新的方法， 会捉老鼠，
# 重写父类的【会叫】的方法，改成【喵喵叫】

class Cat(Animal):

    hair = "短毛"

    def __init__(self,name,color,age,sex):
        self.name = name
        self.color = color
        self.age = age
        self.sex = sex
        print(f"这只猫的名字叫:{self.name},颜色为:{self.color},年龄为:{self.age}岁,性别为:{self.sex},毛发为:{self.hair}")

    def catchmice(self):
        print(f"{self.name}捉到了老鼠")

    def call(self):
        print(f"{self.name}在喵喵叫")

# 3、创建子类【狗】
# 继承【动物类】，复写父类的__init__方法，继承父类的属性
# 添加一个新的属性，毛发=长毛
# 添加一个新的方法， 会看家
# 重写父类的【会叫】的方法，改成【汪汪叫】

class Dog(Animal):

    hair = "长毛"

    def __init__(self, name, color, age, sex):
        self.name = name
        self.color = color
        self.age = age
        self.sex = sex
        print(f"这只狗的名字叫:{self.name},颜色为:{self.color},年龄为:{self.age}岁,性别为:{self.sex},毛发为:{self.hair}")

    def guard(self):
        print(f"{self.name}会看家")

    def call(self):
        print(f"{self.name}在汪汪叫 ")


# 4、在入口函数中创建类的实例
# 创建一个猫猫实例，调用捉老鼠的方法
# 打印出：【猫猫的姓名，颜色，年龄，性别，毛发，捉到了老鼠】
# 创建一个狗狗实例，调用【会看家】的方法
# 打印出：【狗狗的姓名，颜色，年龄，性别，毛发】

cat1 = Cat('Tom','白色',3,'公猫')
cat1.catchmice()

dog1 = Dog('Jim','黑色',3,'母狗')
dog1.guard()
dog1.call()
